package com.aweqy.subjectredis;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.aweqy.subjectredis.common.ResultUtils;
import org.junit.jupiter.api.Test;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

@SpringBootTest
public class jsonOfRule {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate; // 专门处理String类型的RedisTemplate

    @Test
    public void test() {
        String content = "Tag文件要保存在web服务目录ch下的哪个目录中。【D 】 A、ch\\web-inf\\tags            B、ch\\Web-Inf\\tag      C、ch\\WEB-INF\\tag           D、ch\\WEB-INF\\tags";
        String category = "1";
        String prefix = "subject:" + category;
        Long id = redisTemplate.opsForValue().increment(prefix + ":counter");
        String key = prefix + ":" + id;

        // 处理value，转化为json
        String rule = stringRedisTemplate.opsForValue().get("subject:category:" + category);
        System.out.println("原始规则: " + rule);

        try {
            // 解析规则JSON
            JSONObject ruleObj = JSONUtil.parseObj(rule);

            // 获取并处理正则表达式（修正双重转义问题）
            String regex = ruleObj.getStr("regex").replace("\\\\", "\\");
            System.out.println("处理后的正则表达式: " + regex);

            // 编译正则表达式，检查是否有效
            try {
                Pattern.compile(regex);
                System.out.println("正则表达式有效");
            } catch (PatternSyntaxException e) {
                System.err.println("正则表达式无效: " + e.getMessage());
                return;
            }

            // 处理替换字符串
            String replacement = ruleObj.getStr("replacement")
                    .replace("\\\"", "\"")
                    .replace("\\\\n", "\n")  // 修正：替换转义的换行符
                    .replace("\\\\t", "\t")  // 修正：替换转义的制表符
                    .replace("\\\\r", "\r"); // 修正：替换转义的回车符
            System.out.println("处理后的替换文本: " + replacement);

            // 执行替换
            String value = content.replaceAll(regex, replacement);

            // 检查是否有匹配
            if (content.equals(value)) {
                System.out.println("警告：正则表达式没有匹配到任何内容");

                // 调试：输出匹配信息
                Matcher matcher = Pattern.compile(regex).matcher(content);
                System.out.println("匹配结果: " + matcher.find());
            }

            System.out.println("替换结果: " + value);

            // 存入 Redis 数据库
            // stringRedisTemplate.opsForValue().set(key, value);

        } catch (Exception e) {
            System.err.println("处理过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        }
    }

    @Test
    void text2() {

        String json = stringRedisTemplate.opsForValue().get("subject:3:1");
        System.out.println(JSONUtil.parseObj(json).getStr("answer"));

    }
}
